package com.elguile.laptop.entidades;

import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Venta {

	private final List<Linea> lines = new ArrayList<>();
	private Cliente cliente;
	private Integer codigoVenta;
	private Date fecha;

	public Venta() {

	}

	public Venta(Venta venta) {
		setFecha(venta.getFecha());
		setCodigoVenta(venta.getCodigoVenta());
		if (venta.getCliente() != null) {
			setCliente(new Cliente(venta.getCliente().getCodigo(), venta
					.getCliente().getNombre(), venta.getCliente().getDni()));
		}

		for (int i = 0; i <= venta.getCantidadLineas() - 1; i++) {
			Linea linea = venta.getLinea(i);
			add(new Linea(linea.getCantidad(), linea.getDescripcion(),
					linea.getPrecio()));
		}
	}

	public Venta(Integer codigoVenta, Date fecha) {
		this(new Cliente(), codigoVenta, fecha);
	}

	public Venta(Cliente cliente, Integer codigoVenta, Date fecha) {
		this.codigoVenta = codigoVenta;
		this.fecha = fecha;

		this.cliente = cliente;
	}

	public Venta(Date fecha) {
		this.fecha = fecha;
	}

	public BigDecimal obtnerTotal() {
		BigDecimal total = BigDecimal.ZERO;
		for (Linea line : lines) {
			total = total.add(line.getTotal());
		}
		return total;
	}

	public void setCodigoVenta(Integer codigoVenta) {
		this.codigoVenta = codigoVenta;
	}

	public void add(Linea line) {
		lines.add(line);
	}

	public int obtenerCantidadDeLineas() {

		return lines.size();
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public Integer getCodigoVenta() {
		return codigoVenta;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<Linea> getLineas() {
		return new ArrayList<>(lines);
	}

	public Linea getPrimeraLinea() {
		return getLineas().get(0);
	}

	public Linea getLinea(int index) {
		return getLineas().get(index);
	}

	public int getCantidadLineas() {
		return lines.size();
	}

	public void limpiarLineas() {
		lines.clear();
	}

	@Override
	public String toString() {
		return "Venta [lines=" + lines + ", codigoVenta=" + codigoVenta
				+ ", fecha=" + fecha + "]";
	}

	public boolean estaEntreFechas(Date inicio, Date fin) {

		return getFecha().getTime() >= inicio.getTime()
				&& getFecha().getTime() <= fin.getTime();
	}

}
